﻿// 303 [UVA 12467] Secret word.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <cstring>

using namespace std;
/*
http://oj.daimayuan.top/course/22/problem/910

给你一个字符串 s
，你需要找出 s
 中最长的 secret word，一个字符串 p
 是 secret word 需要满足：

p
 是 s
 的子串（p
 可以与 s
 相等）；
将 p
 翻转后是 s
 的前缀。
输入一行字符串 s
，输出一行字符串为你求得的 p
。

输入格式
一行一个字符串 s
。

输出格式
输出一行一个字符串表示答案。

样例输入
listentothesilence
样例输出
sil
数据规模
对于所有数据，保证 1≤|s|≤105
，字符串均由小写字母构成。
*/

int t, n, m; int nxt[200011];
char p[200011];


void kmp() {
	m = strlen(p + 1);
	p[m + 1] = '#';
	for (int i = m + 2, j = m; j; --j, ++i) {
		p[i] = p[j];
	}

	int j = 0;
	nxt[1] = 0;
	for (int i = 2; i <= m + m + 1; i++) {
		while (j && p[i] != p[j + 1])
			j = nxt[j];
		if (p[i] == p[j + 1])
			++j;
		nxt[i] = j;
	}

	int x = 0;
	for (int i = m + 2; i <= m + m + 1; i++)
		x = max(x,nxt[i]);
	for (int i = x; i >= 1; i--)
		printf("%c",p[i]);
	printf("\n");
}


int main()
{
	scanf("%s",p+1);
	kmp();

	return 0;
}

 